// 自定义队列
function Queue() {
  // 用于保存元素的数组
  this.items = [];

  // 队列操作的方法
  // enter queue方法
  this.enqueue = function (element) {
    this.items.push(element);
  };

  // delete queue方法
  this.dequeue = function () {
    return this.items.shift();
  };

  // 查看前端的元素
  this.front = function () {
    return this.items[0];
  };

  // 查看队列是否为空
  this.isEmpty = function () {
    return this.items.length === 0;
  };

  // 查看队列中元素的个数
  this.size = function () {
    return this.items.length;
  };
}

function passGame1(elementsList, num) {
  let queue = new Queue();
  let eliminatedList = [];

  for (let i = 0; i < elementsList.length; i++) {
    queue.enqueue(elementsList[i]);
  }

  while (queue.size() > 1) {
    for (let i = 1; i < num; i++) {
      queue.enqueue(queue.dequeue());
    }
    eliminatedList.push(queue.dequeue());
  }
  return {
    eliminated: eliminatedList,
    winner: queue.dequeue(),
  };
}

function passGame2(nameList, num) {
  // 1.创建一个队列, 并且将所有的人放在队列中
  // 1.1.创建队列
  let queue = new Queue();

  // 1.2.通过for循环, 将nameList中的人放在队列中
  for (let i = 0; i < nameList.length; i++) {
    queue.enqueue(nameList[i]);
  }

  // 2.寻找最后剩下的人
  while (queue.size() > 1) {
    // 将前num-1中的人, 都从队列的前端取出放在队列的后端
    for (let i = 1; i < num; i++) {
      queue.enqueue(queue.dequeue());
    }

    // 将第num个人, 从队列中移除
    queue.dequeue();
  }

  // 3.获取剩下的一个人
  let endName = queue.dequeue();

  // 4.获取该人在队列中的位置
  return endName;
}

let names = ["John", "Jack", "Camila", "Ingrid", "Carl"];
let endName1 = passGame1(names, 8); // 数到 8 的人淘汰
let endName2 = passGame2(names, 8); // 数到 8 的人淘汰
console.log("最终留下:" + endName1.winner); // 'john'
console.log("最终留下:" + endName2); // 'john'
